home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Games / JST / sources / OSEmu / lowlevel.s < prev    next >
Encoding:
Text File  |  2001-03-19  |  15.3 KB  |  681 lines

  1. * $Id: lowlevel.s 1.1 1999/02/03 04:08:28 jotd Exp $
  2.  
  3. ; most of this stuff was ripped from the real lowlevel library
  4.  
  5. TEST_JOY_BUTTON:MACRO
  6.     bclr    #JPB_BUTTON_\1,D0    ; button released
  7.     move.l    (A0)+,D1
  8.     tst.w    D1
  9.     beq.b    .rts_\1
  10.     bset    #JPB_BUTTON_\1,D0    ; button pressed
  11. .rts_\1
  12.     ENDM
  13.  
  14. **************************************************************************
  15. *   LOWLEVEL-LIBRARY                                                    *
  16. **************************************************************************
  17. **************************************************************************
  18. *   INITIALIZATION                                                       *
  19. **************************************************************************
  20.  
  21. LOWLINIT    move.l    _lowlbase,d0
  22.         beq    .init
  23.         rts
  24.  
  25. .init        move.l    #162,d0        ; reserved function
  26.         move.l    #250,d1
  27.         lea    _lowlname,a0
  28.         bsr    _InitLibrary
  29.         move.l    d0,a0
  30.         move.l    d0,_lowlbase
  31.         
  32.         patch    _LVOReadJoyPort(a0),_ReadJoyPort
  33.         patch    _LVOSetJoyPortAttrsA(a0),SETJOYPORTATTRS
  34.         patch    _LVOAddVBlankInt(a0),ADDVBLANKINT
  35.         patch    _LVOAddKBInt(a0),ADDKBINT
  36.         patch    _LVOAddTimerInt(a0),ADDTIMERINT
  37.         patch    _LVORemTimerInt(a0),REMTIMERINT
  38.         patch    _LVOStartTimerInt(a0),STARTTIMERINT
  39.         patch    _LVOStopTimerInt(a0),STOPTIMERINT
  40.         patch    _LVORemVBlankInt(a0),MYRTS
  41.         patch    _LVORemKBInt(a0),MYRTS
  42.         patch    _LVOQueryKeys(a0),QueryKeys
  43.         patch    _LVOSystemControlA(a0),MYRTZ
  44.         patch    _LVOGetLanguageSelection(a0),GETLANGSEL
  45.         patch    _LVOGetKey(a0),GETKEY
  46.         patch    _LVOElapsedTime(a0),ELAPSEDTIME
  47.  
  48.         movem.l    D0-A6,-(A7)
  49.         move.l    D0,A5
  50.         CLR.L    242(A5)    ; i don't remember why I did that
  51.         move.l    #$ad303,44(A5)    ; EClock rate for timer
  52.  
  53.         lea.l   JOYPAD1KEYS(PC),a0 ;copy joypad keys to
  54.         lea.l   OSM_JOYPAD1KEYS,a1 ;location in lowlevel.lib
  55.         moveq.l #6*2-1,d0
  56.         tst.b   (A0)+
  57. .copykeys    move.b  (A1)+,(A0)+
  58.         addq.l  #3,a0
  59.         dbf     d0,.copykeys
  60.  
  61.         ; opens keyboard device
  62.  
  63.         lea    _kbdevname(pc),A0
  64.         moveq.l    #0,D0
  65.         moveq.l    #0,D1
  66.  
  67.         lea    -64(A7),A7
  68.         move.l    A7,A1
  69.         move.l    $4.W,A6
  70.         JSRLIB    OpenDevice
  71.         move.l    20(A7),68(A5)    ; device base
  72.         lea    64(A7),A7
  73.  
  74.  
  75.         ; opens timer device
  76.  
  77.         lea    _timerdevname(pc),A0
  78.         moveq.l    #0,D0
  79.         moveq.l    #0,D1
  80.  
  81.         lea    -64(A7),A7
  82.         move.l    A7,A1
  83.         move.l    $4.W,A6
  84.         JSRLIB    OpenDevice
  85.         move.l    20(A7),64(A5)    ; device base
  86.         lea    64(A7),A7
  87.  
  88.         movem.l    (A7)+,D0-A6
  89.         rts
  90.  
  91. GETLANGSEL:
  92.     moveq.l    #2,D0    ; british english
  93.     rts
  94.  
  95. ; adds a vblank interrupt
  96. ; < A0: intRoutine
  97. ; < A1: intData
  98.  
  99. ADDVBLANKINT:
  100.     movem.l    D2-D7/A2-A6,-(A7)
  101.     lea    .int_entry(pc),A3
  102.     move.l    A0,(A3)
  103.     lea    .caller_int(pc),A0
  104.  
  105.     lea    .int_struct(pc),A3
  106.     move.b    #NT_INTERRUPT,8(A3)    ; ln_Type = INTERRUPT
  107.     move.b    #0,9(A3)        ; Highest priority
  108.     move.l    .vbname,10(A3)        ; The name of the server (for monitor programs)
  109.     move.l    A0,18(A3)        ; The new interrupt server code to chain with
  110.     move.l    A1,14(A3)        ; The data to pass in A1 at each call
  111.     move.l    #INTB_VERTB,D0        ; Vertical Blank interrupt
  112.     move.l    $4.W,A6
  113.     move.l    A3,A1            ; pointer on interrupt structure
  114.     JSR    _LVOAddIntServer(A6)    ; Adds the handler to the existing chain
  115.     
  116.     movem.l    (A7)+,D2-D7/A2-A6
  117.  
  118.     moveq.l    #1,D0            ; returns !=0 because success
  119.     rts
  120.  
  121. .caller_int:
  122.     move.l    .int_entry(pc),A5    ; as required in lowlevel autodoc
  123.     jmp    (A5)
  124.  
  125. .int_entry:
  126.     dc.l    0
  127. .int_struct:
  128.     ds.b    22
  129. .vbname:    
  130.     dc.b    "lowlevel vbl",0
  131.     cnop    0,4
  132.  
  133. ; adds a keyboard interrupt
  134. ; < A0: intRoutine
  135. ; < A1: intData
  136.  
  137. ADDKBINT:
  138.     movem.l    D2-D7/A2-A6,-(A7)
  139.     lea    .int_entry(pc),A3
  140.     move.l    A0,(A3)
  141.     lea    .caller_int(pc),A0
  142.  
  143.     lea    .int_struct(pc),A3
  144.     move.b    #NT_INTERRUPT,8(A3)    ; ln_Type = INTERRUPT
  145.     move.b    #0,9(A3)        ; Highest priority
  146.     move.l    .vbname,10(A3)        ; The name of the server (for monitor programs)
  147.     move.l    A0,18(A3)        ; The new interrupt server code to chain with
  148.     move.l    A1,14(A3)        ; The data to pass in A1 at each call
  149.     move.l    #INTB_PORTS,D0        ; Ports interrupt
  150.     move.l    $4.W,A6
  151.     move.l    A3,A1            ; pointer on interrupt structure
  152.     JSR    _LVOAddIntServer(A6)    ; Adds the handler to the existing chain
  153.     
  154.     movem.l    (A7)+,D2-D7/A2-A6
  155.     moveq.l    #1,D0            ; returns !=0 because success
  156.     rts
  157.  
  158. .caller_int:
  159.     move.l    .int_entry(pc),A5    ; as required in lowlevel autodoc
  160.  
  161. ;    move.b    $BFEC01,D0
  162. ;    not.b    D0
  163. ;    ror.b    #1,D0            ; raw keycode
  164.  
  165.     move.b    KBDQUALIFIER+1,D0
  166.     cmp.b    .lastkey(pc),D0
  167.     beq.b    .ports_end        ; same key: impossible, since the key needs
  168.     move.b    D0,.lastkey        ; to be released. We don't call the user routine
  169.  
  170.     ; acknowledge keyboard
  171.  
  172. ;    bsr    AckKeyboard
  173.  
  174. .out
  175.     ; jumps to user routine
  176.  
  177.     jmp    (A5)
  178. .ports_end
  179.     ; does not call user routine
  180.  
  181.     rts
  182.  
  183. .int_entry:
  184.     dc.l    0
  185. .int_struct:
  186.     ds.b    22
  187. .vbname:    
  188.     dc.b    "lowlevel kb",0
  189. .lastkey:
  190.     dc.b    0
  191.     cnop    0,4
  192.  
  193. ; adds a timer interrupt
  194. ; < A0: intRoutine
  195. ; < A1: intData
  196.  
  197. ADDTIMERINT:
  198.  
  199.     MOVEM.L    A0-A1/A4-A6,-(A7)    ;08C4: 48E700CE
  200.     MOVEA.L    A6,A5            ;08C8: 2A4E
  201.     MOVEA.L    $4.W,A6        ;08CA: 2C6E0034
  202.     JSR    _LVOForbid(A6)    ;(exec.library)
  203.     TST.L    242(A5)            ;08D2: 4AAD00F2
  204.     BEQ.S    LOWL_0061        ;08D6: 670C
  205.     JSR    _LVOPermit(A6)    ;(exec.library)
  206.     MOVEM.L    (A7)+,A0-A1/A4-A6    ;08DC: 4CDF7300
  207.     MOVEQ    #0,D0            ;08E0: 7000
  208.     RTS                ;08E2: 4E75
  209. LOWL_0061:
  210.     MOVEM.L    (A7)+,A0-A1        ;08E4: 4CDF0300
  211.     LEA    224(A5),A4        ;08E8: 49ED00E0
  212.     MOVE.L    A0,18(A4)        ;08EC: 29480012
  213.     MOVE.L    A1,14(A4)        ;08F0: 2949000E
  214.     CLR.B    9(A4)            ;08F4: 422C0009
  215.     MOVE.B    #$02,8(A4)        ;08F8: 197C00020008
  216.     MOVE.L    10(A5),10(A4)        ;08FE: 296D000A000A
  217.     JSR    _LVOPermit(A6)    ;(exec.library)
  218.     JSR    _LVODisable(A6)    ;(exec.library)
  219.     LEA    _ciaaname,A1        ;090C: 43FA01F2
  220.     JSR    LOWL_0071        ;0910: 4EB900000A3C
  221.     BPL.S    LOWL_0062        ;0916: 6A1C
  222.     MOVEA.L    $4.W,A6        ;0918: 2C6D0034
  223.     LEA    _ciabname,A1        ;091C: 43FA01F0
  224.     JSR    LOWL_0071        ;0920: 4EB900000A3C
  225.     BPL.S    LOWL_0062        ;0926: 6A0C
  226.     MOVEQ    #0,D0            ;0928: 7000
  227.     MOVE.L    D0,18(A4)        ;092A: 29400012
  228.     MOVEA.L    $4.W,A6        ;092E: 2C6D0034
  229.     BRA.S    LOWL_0065        ;0932: 603C
  230. LOWL_0062:
  231.     MOVE.L    A6,24(A4)        ;0934: 294E0018
  232.     MOVE    D0,22(A4)        ;0938: 39400016
  233.     BNE.S    LOWL_0063        ;093C: 6612
  234.     MOVEQ    #14,D1            ;093E: 720E
  235.     ROL.L    #8,D1            ;0940: E199
  236.     MOVE.L    #$000100CE,D0        ;0942: 203C000100CE
  237.     MOVEA.L    34(A6),A1        ; cia base from cia-resource
  238.     BRA.S    LOWL_0064        ;094E: 6010
  239. LOWL_0063:
  240.     MOVEQ    #15,D1            ;0950: 720F
  241.     ROL.L    #8,D1            ;0952: E199
  242.     MOVE.L    #$0002008E,D0        ;0954: 203C0002008E
  243.     move.l    34(A6),a1    ;cia-base from cia.resource
  244. LOWL_0064:
  245.     AND.B    D0,0(A1,D1)        ;0960: C1311000
  246.     SWAP    D0            ;0964: 4840
  247.     JSR    -24(A6)        ; SetICR
  248.     MOVEA.L    $4.W,A6        ;096A: 2C6D0034
  249.     MOVE.L    A4,D0            ;096E: 200C
  250. LOWL_0065:
  251.     JSR    _LVOEnable(A6)    ;(exec.library)
  252.     MOVEM.L    (A7)+,A4-A6        ;0974: 4CDF7000
  253.     RTS                ;0978: 4E75
  254.  
  255. LOWL_0071:
  256.     JSRLIB    OpenResource
  257.     MOVEA.L    D0,A6            ;0A40: 2C40
  258.     MOVEA.L    A4,A1            ;0A42: 224C
  259.     MOVE    #$0000,D0        ;0A44: 303C0000
  260.     MOVE    D0,-(A7)        ;0A48: 3F00
  261.     JSRLIB    AddICRVector ; (cia.resource)
  262.     TST.L    D0            ;0A4E: 4A80
  263.     BEQ.S    LOWL_0072        ;0A50: 6714
  264.     MOVEA.L    A4,A1            ;0A52: 224C
  265.     MOVE    #$0001,D0        ;0A54: 303C0001
  266.     MOVE    D0,(A7)            ;0A58: 3E80
  267.     JSRLIB    AddICRVector ; (cia.resource)
  268.     TST.L    D0            ;0A5E: 4A80
  269.     BEQ.S    LOWL_0072        ;0A60: 6704
  270.     MOVE    #$FFFF,(A7)        ;0A62: 3EBCFFFF
  271. LOWL_0072:
  272.     MOVE    (A7)+,D0        ;0A66: 301F
  273.     RTS                ;0A68: 4E75
  274.  
  275. REMTIMERINT:
  276.     MOVE.L    A6,-(A7)        ;0A18: 2F0E
  277.     MOVE.L    A1,-(A7)        ;0A1A: 2F09
  278.     BEQ.S    .rti_0070        ;0A1C: 6718
  279.     MOVE    22(A1),D0        ;0A1E: 30290016
  280.     MOVEA.L    24(A1),A6        ;0A22: 2C690018
  281.     JSR    _LVORemICRVector(A6); (cia.resource)
  282.     MOVEM.L    (A7)+,A1        ;0A2A: 4CDF0200
  283.     CLR.L    18(A1)            ;0A2E: 42A90012
  284.     MOVEA.L    (a7)+,a6        ;0A32: 2C5F
  285.     RTS                ;0A34: 4E75
  286. .rti_0070:
  287.     MOVEM.L    (A7)+,A1/A6        ;0A36: 4CDF4200
  288.     RTS                ;0A3A: 4E75
  289.  
  290. STARTTIMERINT:
  291.     MOVEM.L    D1-D3,-(A7)        ;09A4: 48E77000
  292.     TST.W    22(A1)            ;timer a or b?
  293.     BNE.S    .lab_006A        ;09AC: 6618
  294.     MOVEQ    #14,D2            ;09AE: 740E
  295.     ROL.L    #8,D2            ;09B0: E19A
  296.     MOVE.L    #$000100C6,D3        ;09B8: 263C000100C6
  297.     MOVEA.L    24(A1),a0
  298.     move.l    34(A0),a0    ;get cia-baseaddress from resource instead
  299.     MOVEA.L    #$00000400,A1        ;09B2: 227C00000400
  300.     BRA.S    .lab_006B        ;09C4: 6016
  301. .lab_006A:
  302.     MOVEQ    #15,D2            ;09C6: 740F
  303.     ROL.L    #8,D2            ;09C8: E19A
  304.     MOVE.L    #$00010086,D3        ;09D0: 263C00010086
  305.     MOVEA.L    24(A1),a0    ;#$00BFD000,A0        ;09D6: 207C00BFD000
  306.     move.l    34(A0),a0
  307.     MOVEA.L    #$00000600,A1        ;09CA: 227C00000600
  308. .lab_006B:
  309.     AND.B    D3,0(A0,D2)        ;09DC: C7302000
  310.     TST    D1            ;09E0: 4A41
  311.     BNE.S    .lab_006C        ;09E2: 6606
  312.     ORI.B    #$08,0(A0,D2)        ;09E4: 003000082000
  313. .lab_006C:
  314.     MOVE.L    44(A6),D1        ;09EA: 222E002C
  315.     LSR.L    #1,D0            ;09EE: E288
  316.     LSR.L    #4,D1            ;09F0: E889
  317.     MULU    D1,D0            ;09F2: C0C1
  318.     DIVU    #$7A12,D0        ;09F4: 80FC7A12
  319.     BNE.S    .lab_006D        ;09F8: 6602
  320.     ADDQ.B    #1,D0            ;09FA: 5200
  321. .lab_006D:
  322.     ADDA.L    A0,A1            ;09FC: D3C8
  323.     MOVE.B    D0,(A1)            ;09FE: 1280
  324.     LSR    #8,D0            ;0A00: E048
  325.     MOVE.B    D0,256(A1)        ;0A02: 13400100
  326.     TST    2(A7)            ;0A06: 4A6F0002
  327.     BEQ.S    .lab_006E        ;0A0A: 6706
  328.     SWAP    D3            ;0A0C: 4843
  329.     OR.B    D3,0(A0,D2)        ;0A0E: 87302000
  330. .lab_006E:
  331.     MOVEM.L    (A7)+,D1-D3        ;0A12: 4CDF000E
  332.     RTS                ;0A16: 4E75
  333.  
  334.  
  335. STOPTIMERINT:
  336.     TST.W    22(A1)            ;097A: 4A690016
  337.     BNE.S    .lab_0067        ;097E: 6610
  338.     MOVEQ    #14,D1            ;0980: 720E
  339.     ROL.L    #8,D1            ;0982: E199
  340.     MOVE    #$00CE,D0        ;0984: 303C00CE
  341.     move.l    24(A1),a1        ; cia base address
  342.     move.l    34(A1),a1
  343.     BRA.S    .lab_0068        ;098E: 600E
  344. .lab_0067:
  345.     MOVEQ    #15,D1            ;0990: 720F
  346.     ROL.L    #8,D1            ;0992: E199
  347.     MOVE    #$008E,D0        ;0994: 303C008E
  348.     move.l    24(A1),a1
  349.     move.l    34(A1),a1
  350. .lab_0068:
  351.     AND.B    D0,0(A1,D1)        ;099E: C1311000
  352.     RTS                ;09A2: 4E75
  353.  
  354.  
  355.  
  356. ; forces a port to a controller type and allows to reset it
  357.  
  358. SETJOYPORTATTRS:
  359.     moveq.l    #-1,D0    ; all went OK
  360.     rts
  361.  
  362. ; reads joypads/mouses/...
  363.  
  364. _ReadJoyPort:
  365.     cmp.w    #0,D0
  366.     beq    .joy0
  367.     cmp.w    #1,D0
  368.     beq    .joy1
  369.  
  370.     move.l    #JP_TYPE_NOTAVAIL,D0    ; neither port 0 or 1 !
  371.     bra.w    .rjexit
  372. .joy0
  373.     moveq.l    #0,D0
  374.     move.b    OSM_PORTS_CONFIG,D0    ; type of controller connected (see osemu.asm)
  375.  
  376.     btst    #6,$bfe001
  377.     bne    .nob1_0
  378.  
  379.     bset    #JPB_BUTTON_RED,D0    ; fire/lmb
  380. .nob1_0:
  381.     move.w    potinp_value(pc),D1
  382.     btst    #10,D1
  383.     bne.b    .nob2_0
  384.  
  385.     bset    #JPB_BUTTON_BLUE,D0    ; fire 2/rmb
  386. .nob2_0    
  387.  
  388.     ; joystick moves
  389.  
  390.     move.l    A6,-(A7)
  391.     lea    (joy0dat+_custom),A6
  392.     bsr    .joy_test
  393.     move.l    (A7)+,A6
  394.     bra.b    .rjexit
  395.  
  396. .joy1
  397.     moveq.l    #0,D0
  398.     move.b    OSM_PORTS_CONFIG+1,D0    ; type of controller connected (see osemu.asm)
  399.  
  400.     btst    #7,$bfe001
  401.     bne    .nob1_1
  402.  
  403.     bset    #JPB_BUTTON_RED,D0    ; fire/lmb
  404.     
  405. .nob1_1:
  406.  
  407.     move.w    potinp_value(pc),D1
  408.     btst    #14,D1
  409.     bne.b    .nob2_1
  410.  
  411.     bset    #JPB_BUTTON_BLUE,D0    ; fire 2/rmb
  412. .nob2_1:
  413.  
  414.     ; joystick moves
  415.  
  416.     move.l    A6,-(A7)
  417.     lea    (joy1dat+_custom),A6
  418.     bsr    .joy_test
  419.     move.l    (A7)+,A6
  420.  
  421.     move.l    D0,-(A7)
  422.     movem.l    D1/D2,-(A7)
  423.     move.l    .old_buttonmask(pc),D0
  424.     bsr    .button_test
  425.     movem.l    (A7)+,D1/D2
  426.     move.l    D0,.old_buttonmask
  427.     or.l    (A7),D0
  428.     move.l    D0,(A7)
  429.     move.l    (A7)+,D0
  430. .rjexit
  431.     rts
  432.  
  433.  
  434. ; other joypad buttons by keyboard emulation
  435. ; even a real joypad does not work properly on a real amiga!
  436. ; (I don't really know why!)
  437.  
  438. .button_test0
  439.     lea     JOYPAD0KEYS(pc),A0
  440.     moveq.l #6,D1
  441.  
  442.     movem.l D0,-(A7)
  443.     bsr     QueryKeys
  444.     movem.l (A7)+,D0
  445.  
  446.     lea     JOYPAD0KEYS(pc),A0
  447.     bra.s   .allbutton_test
  448.  
  449. .button_test:
  450.     lea    .query_array(pc),A0
  451.     moveq.l    #6,D1
  452.  
  453.     movem.l    D0,-(A7)
  454.     bsr    QueryKeys
  455.     movem.l    (A7)+,D0
  456.  
  457.     lea    .query_array(pc),A0
  458. .allbutton_test:
  459.     TEST_JOY_BUTTON    BLUE    ; F5: fire 2/blue/rmb
  460.     TEST_JOY_BUTTON    GREEN    ; F6: Green
  461.     TEST_JOY_BUTTON    YELLOW    ; F7: Yellow
  462.     TEST_JOY_BUTTON    PLAY    ; F8: Play/pause
  463.     TEST_JOY_BUTTON    REVERSE    ; F9: left ear
  464.     TEST_JOY_BUTTON    FORWARD    ; F10:right ear
  465.     rts
  466.  
  467. ; tests joystick moves
  468. ; < A6: custom reg. of the selected joystick
  469. ; > D0: joystick bits set
  470.  
  471. .joy_test:
  472.     movem.l    D4-D6,-(A7)
  473.  
  474.     move.w    (A6),D4
  475.     move.w    D4,D5
  476.     btst    #1,D4
  477.     beq.b    .left_off
  478.     bset    #JPB_JOY_RIGHT,D0
  479.     bra.b    .vert_test
  480. .left_off:
  481.     btst    #9,D4
  482.     beq.b    .vert_test
  483.     bset    #JPB_JOY_LEFT,D0
  484. .vert_test
  485.     lsr.w    #1,D4
  486.     eor.w    D5,D4
  487.     btst    #0,D4
  488.     beq.b    .back_off
  489.     bset    #JPB_JOY_DOWN,D0
  490.     bra.b    .exit
  491. .back_off
  492.     btst    #8,D4
  493.     beq.b    .exit
  494.     bset    #JPB_JOY_UP,D0
  495. .exit
  496.  
  497.     movem.l    (A7)+,D4-D6
  498.     rts
  499.  
  500. .old_buttonmask:
  501.     dc.l    0
  502. .old_buttonmask0:
  503.     dc.l    0
  504.  
  505. .query_array:
  506. JOYPAD1KEYS:
  507.     dc.w    $54,0
  508.     dc.w    $55,0
  509.     dc.w    $56,0
  510.     dc.w    $57,0
  511.     dc.w    $58,0
  512.     dc.w    $59,0
  513. JOYPAD0KEYS:
  514.     dc.w    $5,0
  515.     dc.w    $6,0
  516.     dc.w    $7,0
  517.     dc.w    $8,0
  518.     dc.w    $9,0
  519.     dc.w    $A,0
  520.  
  521. ; A0: queryArray
  522. ; D1: array size
  523.  
  524. QueryKeys:
  525.     MOVEM.L    D2/A2/A5-A6,-(A7)    ;1584: 48E72026
  526.     MOVEA.L    A6,A5            ;1588: 2A4E
  527.     MOVE.B    D1,D2            ;158A: 1401
  528.     MOVEA.L    A0,A2            ;158C: 2448
  529.     MOVEA.L    $4.W,A6
  530.     SUBA.L    A1,A1            ;1592: 93C9
  531.     JSRLIB    FindTask    ;(exec.library)
  532.  
  533. ;;;    MOVEA.L    84(A5),A0        ;1598: keyboard.device base
  534. ;;;    MOVE.L    D0,16(A0)        ;159C: 21400010
  535. ;;;    MOVE.B    #$04,15(A0)        ;15A0: 117C0004000F
  536. ;;;    MOVE.B    #$00,14(A0)        ;15A6: 117C0000000E
  537.  
  538.     LEA    -64(A7),A7        ;15AC: 4FEFFFC0
  539.  
  540. ;;;    MOVE.L    A0,14(A7)        ;15B0: 2F48000E
  541.  
  542.     MOVEA.L    A7,A1            ;15B4: 224F
  543.     MOVE.L    68(A5),20(A1)        ;15B6: 236D00440014
  544.     MOVE    #$000A,28(A1)        ;15BC: 337C000A001C
  545.     LEA    48(A7),A0        ;15C2: 41EF0030
  546.     MOVE.L    A0,40(A1)        ;15C6: 23480028
  547.     MOVE.L    #$00000010,36(A1)    ;15CA: 237C000000100024
  548.     JSR    _LVODoIO(A6)    ;(exec.library)
  549.     TST.B    D0            ;15D6: 4A00
  550.     BNE.S    .qk_00E2        ;15D8: 661E
  551. .qk_00DE:
  552.     MOVE    (A2)+,D1        ;15DA: 321A
  553.     MOVE    D1,D0            ;15DC: 3001
  554.     AND    #$0007,D0        ;15DE: C07C0007
  555.     LSR    #3,D1            ;15E2: E649
  556.     BTST    D0,48(A7,D1)        ;15E4: 01371030
  557.     BEQ.S    .qk_00DF        ;15E8: 6706
  558.     MOVE    #$FFFF,(A2)+        ;15EA: 34FCFFFF
  559.     BRA.S    .qk_00E0        ;15EE: 6004
  560. .qk_00DF:
  561.     MOVE    #$0000,(A2)+        ;15F0: 34FC0000
  562. .qk_00E0:
  563.     SUBQ.B    #1,D2            ;15F4: 5302
  564. .qk_00E1:
  565.     BNE.S    .qk_00DE        ;15F6: 66E2
  566. .qk_00E2:
  567. ;;;    MOVEA.L    14(A7),A0        ;15F8: 206F000E
  568.     LEA    64(A7),A7        ;15FC: 4FEF0040
  569. ;;;    MOVE.B    #$02,14(A0)        ;1600: 117C0002000E
  570.     MOVEM.L    (A7)+,D2/A2/A5-A6    ;1606: 4CDF6404
  571.     RTS                ;160A: 4E75
  572.  
  573. ; gets rawkey+qualifier
  574. GETKEY:
  575.     move.w    KBDQUALIFIER,D0
  576.     tst.b    D0
  577.     beq.b    .nok
  578.     rts
  579. .nok
  580.     st.b    D0
  581.     rts
  582.  
  583. ELAPSEDTIME:
  584.     MOVEM.L    D2-D3/A6,-(A7)        ;0A6A: 48E73002
  585.     MOVE.L    4(A0),-(A7)        ; old values
  586.     MOVE.L    (A0),-(A7)
  587.     MOVEA.L    64(A6),A6    ; timer base
  588.     JSRLIB    ReadEClock
  589.     MOVEM.L    (A0)+,D1-D2        ;0A7C: 4CD80006
  590.     SUB.L    4(A7),D2        ;0A80: 94AF0004
  591.     MOVE.L    (A7)+,D3        ;0A84: 261F
  592.     ADDQ    #4,A7            ;0A86: 584F
  593.     SUBX.L    D3,D1            ;0A88: 9383
  594.     BPL.S    LAB_0074        ;0A8A: 6A04
  595.     NEG.L    D2            ;0A8C: 4482
  596.     NEGX.L    D1            ;0A8E: 4081
  597. LAB_0074:
  598.     SWAP    D1            ;0A90: 4841
  599.     TST    D1            ;0A92: 4A41
  600.     BNE.S    LAB_0076        ;0A94: 6614
  601.     SWAP    D2            ;0A96: 4842
  602.     MOVE    D2,D1            ;0A98: 3202
  603.     CLR    D2            ;0A9A: 4242
  604.     IFND    HARRY
  605.     MC68020        ; lowlevel should need 68020+AGA so noproblemo with this
  606.     ENDC
  607.     DIVU.L    D0,D1:D2        ;0A9C: 4C402401
  608.     IFND    HARRY
  609.     MC68000
  610.     ENDC
  611.     BVS.S    LAB_0076        ;0AA0: 6908
  612.     MOVE.L    D2,D0            ;0AA2: 2002
  613. LAB_0075:
  614.     MOVEM.L    (A7)+,D2-D3/A6        ;0AA4: 4CDF400C
  615.     RTS                ;0AA8: 4E75
  616. LAB_0076:
  617.     MOVEQ    #-1,D0            ;0AAA: 70FF
  618.     BRA.S    LAB_0075        ;0AAC: 60F6
  619.  
  620.  
  621. ; unused ATM
  622.  
  623.     IFD    KKKKKKK
  624. LOWL_00D7:
  625.     MOVEM.L    D2/A4-A6,-(A7)        ;16A8: 48E7200E
  626.     MOVEA.L    A1,A4            ;16AC: 2849
  627.     MOVEQ    #0,D2            ;16AE: 7400
  628.     MOVE.B    $BFEC01,D2        ;16B0: 143900BFEC01
  629.     NOT.B    D2            ;16B6: 4602
  630.     ROR.B    #1,D2            ;16B8: E21A
  631.     MOVEA.L    (72,A4),A0        ;16BA: 206C0048
  632.     MOVEA.L    (14,A0),A1        ;16BE: 2268000E
  633.     MOVEA.L    (18,A0),A5        ;16C2: 2A680012
  634.     JSR    (A5)            ;16C6: 4E95
  635.     CMP    #$0078,D2        ;16C8: B47C0078
  636.     BEQ.S    LOWL_00DD        ;16CC: 6760
  637.     MOVE    D2,D1            ;16CE: 3202
  638.     AND    #$0078,D1        ;16D0: C27C0078
  639.     CMP    #$0060,D1        ;16D4: B27C0060
  640.     BNE.S    LOWL_00D8        ;16D8: 6612
  641.     MOVE    (40,A4),D0        ;16DA: 302C0028
  642.     MOVE    D2,D1            ;16DE: 3202
  643.     AND    #$0007,D1        ;16E0: C27C0007
  644.     BCHG    D1,D0            ;16E4: 0340
  645.     MOVE    D0,(40,A4)        ;16E6: 39400028
  646.     BRA.S    LOWL_00DA        ;16EA: 601E
  647. LOWL_00D8:
  648.     BTST    #7,D2            ;16EC: 08020007
  649.     BNE.S    LOWL_00D9        ;16F0: 6606
  650.     MOVE    D2,(42,A4)        ;16F2: 3942002A
  651.     BRA.S    LOWL_00DA        ;16F6: 6012
  652. LOWL_00D9:
  653.     MOVE    D2,D1            ;16F8: 3202
  654.     BCLR    #7,D1            ;16FA: 08810007
  655.     CMP    (42,A4),D1        ;16FE: B26C002A
  656.     BNE.S    LOWL_00DA        ;1702: 6606
  657.     ORI    #$00FF,(42,A4)        ;1704: 006C00FF002A
  658. LOWL_00DA:
  659.     MOVE    D2,D0            ;170A: 3002
  660.     SUBI    #$00F9,D2        ;170C: 044200F9
  661.     BPL.S    LOWL_00DD        ;1710: 6A1C
  662.     MOVEA.L    (252,A4),A1        ;1712: 226C00FC
  663.     BRA.S    LOWL_00DC        ;1716: 600E
  664. LOWL_00DB:
  665.     MOVEA.L    (18,A1),A5        ;1718: 2A690012
  666.     MOVEA.L    (14,A1),A1        ;171C: 2269000E
  667.     JSR    (A5)            ;1720: 4E95
  668.     MOVEA.L    (A7)+,A1        ;1722: 225F
  669.     MOVE    (A7)+,D0        ;1724: 301F
  670. LOWL_00DC:
  671.     MOVE    D0,-(A7)        ;1726: 3F00
  672.     MOVE.L    (A1),-(A7)        ;1728: 2F11
  673.     BNE.S    LOWL_00DB        ;172A: 66EC
  674.     ADDQ    #6,A7            ;172C: 5C4F
  675. LOWL_00DD:
  676.     MOVEM.L    (A7)+,D2/A4-A6        ;172E: 4CDF7004
  677.     RTS                ;1732: 4E75
  678.     MOVE.L    (40,A6),D0        ;1734: 202E0028
  679.     RTS                ;1738: 4E75
  680.     ENDC
  681.